package com.bby.disk.controller;

import com.bby.common.aop.ParseToken;
import com.bby.common.exception.BBYException;
import com.bby.common.utils.R;
import com.bby.disk.bean.req.OfflineTaskReq;
import com.bby.disk.service.IUploadService;
import com.bby.disk.service.impl.UploadService;
import org.springframework.web.bind.annotation.*;

/**
 * 网盘-离线下载
 */
@RestController
@RequestMapping("offline")
public class OfflineController {
    IUploadService uploadService;

    public OfflineController(UploadService uploadService) {
        this.uploadService = uploadService;
    }

    /**
     * 添加离线任务
     * @param userId 必须在headers中带token（必须登录）
     * @param req 参数
     */
    @ParseToken(require = true)
    @PostMapping("add")
    public R addOffline(String userId, @RequestBody OfflineTaskReq req) throws BBYException {
        return R.ok(uploadService.addOfflineTask(userId,req));
    }
    /**
     * 获取离线任务列表
     * @param userId 必须在headers中带token（必须登录）
     */
    @ParseToken(require = true)
    @GetMapping("list")
    public R listOffline(String userId) throws BBYException {
        return R.ok(uploadService.getOfflineTaskList(userId));
    }

    /**
     * 删除离线任务进度
     * @param userId 必须在headers中带token（必须登录）
     * @param taskId taskId
     */
    @ParseToken(require = true)
    @DeleteMapping("del")
    public R delOffline(String userId,String taskId) throws BBYException {
        uploadService.removeOfflineTask(userId,taskId);
        return R.ok();
    }
    /**
     * 获取离线任务进度
     * @param userId 必须在headers中带token（必须登录）
     * @param taskId taskId
     */
    @ParseToken(require = true)
    @GetMapping("progress")
    public R offlineProgress(String userId,String taskId) throws BBYException {
        return R.ok(uploadService.getOfflineTaskFinished(userId,taskId));
    }
    /**
     * 获取离线任务进度
     * @param userId 必须在headers中带token（必须登录）
     * @param taskId taskId
     */
    @ParseToken(require = true)
    @GetMapping("task")
    public R offlineTask(String userId,String taskId) throws BBYException {
        return R.ok(uploadService.getOfflineTask(userId,taskId));
    }

    /**
     * 重新开始离线任务
     * @param userId 必须在headers中带token（必须登录）
     * @param taskId taskId
     */
    @ParseToken(require = true)
    @GetMapping("retry")
    public R retryOffline(String userId,String taskId) throws BBYException {
        uploadService.retryThreadTask(userId,taskId);
        return R.ok();
    }
}
